unsigned long nr_pages, modules_length;
paddr_t s, e;
int i, e820_warn = 0, e820_raw_nr = 0, bytes = 0;
- xen_kexec_reserve_t crash_area;
struct ns16550_defaults ns16550 = {
.data_bits = 8,
.parity = 'n',
#endif
}
- machine_kexec_reserved(&crash_area);
- if ( crash_area.size > 0 )
+ if ( kexec_crash_area.size > 0 )
{
unsigned long kdump_start, kdump_size, k;
init_boot_pages(initial_images_start, initial_images_end);
- kdump_start = crash_area.start;
- kdump_size = crash_area.size;
+ kdump_start = kexec_crash_area.start;
+ kdump_size = kexec_crash_area.size;
printk("Kdump: %luMB (%lukB) at 0x%lx\n",
kdump_size >> 20,
#include <xen/version.h>
#include <public/elfnote.h>
-static char opt_crashkernel[32] = "";
-string_param("crashkernel", opt_crashkernel);
-
DEFINE_PER_CPU (crash_note_t, crash_notes);
cpumask_t crash_saved_cpus;
int crashing_cpu;
spinlock_t kexec_lock = SPIN_LOCK_UNLOCKED;
+xen_kexec_reserve_t kexec_crash_area;
+
+static void __init parse_crashkernel(char *str)
+{
+ unsigned long start, size;
+
+ size = parse_size_and_unit(str, &str);
+ if ( *str == '@' )
+ start = parse_size_and_unit(str+1, NULL);
+ else
+ start = 0;
+
+ if ( start && size )
+ {
+ kexec_crash_area.start = start;
+ kexec_crash_area.size = size;
+ }
+}
+custom_param("crashkernel", parse_crashkernel);
+
static void one_cpu_only(void)
{
/* Only allow the first cpu to continue - force other cpus to spin */
}
__initcall(register_crashdump_trigger);
-void machine_kexec_reserved(xen_kexec_reserve_t *reservation)
-{
- unsigned long start, size;
- char *str = opt_crashkernel;
-
- memset(reservation, 0, sizeof(*reservation));
-
- size = parse_size_and_unit(str, &str);
- if ( *str == '@' )
- start = parse_size_and_unit(str+1, NULL);
- else
- start = 0;
-
- if ( start && size )
- {
- reservation->start = start;
- reservation->size = size;
- }
-}
-
static int kexec_get_reserve(xen_kexec_range_t *range)
{
- xen_kexec_reserve_t reservation;
-
- machine_kexec_reserved(&reservation);
-
- range->start = reservation.start;
- range->size = reservation.size;
+ range->start = kexec_crash_area.start;
+ range->size = kexec_crash_area.size;
return 0;
}